From 9e6d8becbb2ae73562956f2a8c6d8b94b3305dba Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 19 Mar 2019 20:05:17 -0400 Subject: [PATCH] surface: Start sketching a new surface type Start by adding a constructor. We have to call it gdk_surface_new_popup_full for now, since gdk_surface_new_popup is taken. This may be reshuffled later. --- gdk/gdksurface.c | 36 ++++++++++++++++++++++++++++++++++++ gdk/gdksurface.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index 2ad20b169b..1a8587e5f8 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -836,6 +836,42 @@ gdk_surface_new_popup (GdkDisplay *display, return gdk_surface_new (display, NULL, &attr); } +/** + * gdk_surface_new_popup_full: (constructor) + * @display: the display to create the surface on + * @parent: the parent surface to attach the surface to + * + * Create a new popup surface. + * The surface will be attached to @parent and can + * be positioned relative to it using + * gdk_surface_move_to_rect(). + * + * Returns: (transfer full): a new #GdkSurface + */ +GdkSurface * +gdk_surface_new_popup_full (GdkDisplay *display, + GdkSurface *parent) +{ + GdkSurface *surface; + GdkSurfaceAttr attr; + + g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL); + g_return_val_if_fail (GDK_IS_SURFACE (parent), NULL); + + attr.wclass = GDK_INPUT_OUTPUT; + attr.x = 0; + attr.y = 0; + attr.width = 100; + attr.height = 100; + attr.surface_type = GDK_SURFACE_TEMP; + + surface = gdk_surface_new (display, NULL, &attr); + gdk_surface_set_transient_for (surface, parent); + gdk_surface_set_type_hint (surface, GDK_SURFACE_TYPE_HINT_MENU); + + return surface; +} + /** * gdk_surface_new_temp: (constructor) * @display: the display to create the surface on diff --git a/gdk/gdksurface.h b/gdk/gdksurface.h index e35a867af7..f3169b5931 100644 --- a/gdk/gdksurface.h +++ b/gdk/gdksurface.h @@ -440,6 +440,9 @@ GDK_AVAILABLE_IN_ALL GdkSurface * gdk_surface_new_popup (GdkDisplay *display, const GdkRectangle *position); GDK_AVAILABLE_IN_ALL +GdkSurface * gdk_surface_new_popup_full (GdkDisplay *display, + GdkSurface *parent); +GDK_AVAILABLE_IN_ALL GdkSurface * gdk_surface_new_temp (GdkDisplay *display); GDK_AVAILABLE_IN_ALL GdkSurface * gdk_surface_new_child (GdkSurface *parent, -- 2.30.2